package org.example;

import java.util.Stack;

public class MyStack3 {
    private Stack<Integer> stack; //正常存放数据的栈
    private Stack<Integer> minStack; //存放最新数的栈（相对的）

    public void MinStack3() {
        stack = new Stack<>();
        minStack = new Stack<>();
    }

    public void push(int val) {
        // 第一次入栈的时候，都要入，因为只有一个元素，那个元素就是最小值
        // 之后再入栈，就需要和最小栈栈顶元素比较，
        stack.push(val);
        if (minStack.isEmpty() || val <= minStack.peek()) {
            minStack.push(val);
        }

    }

    public void pop() {
        //出栈的时候数据栈正常出，只有数据栈中的元素和最小栈中的栈顶元素相同时才出栈
        if (stack.pop().equals(minStack.peek())) {
            minStack.pop();
        }
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return minStack.peek();
    }
}
